#Boa:Dialog:Dialog1

import wx
import wx.grid
import consultasBD
import CAJAchicaAltas
import CajaDetallesVentas
import time
import datetime
import utiles
import fiscal
import CtasCtes
import Vista
import os
import operator
import Dialog2

def create(parent):
    return Dialog1(parent)

[wxID_DIALOG1, wxID_DIALOG1BUTTON1, wxID_DIALOG1BUTTON2, wxID_DIALOG1BUTTON3, 
 wxID_DIALOG1BUTTON4, wxID_DIALOG1CERRARCAJA, wxID_DIALOG1DATEPICKERCTRL1, 
 wxID_DIALOG1DETALLE, wxID_DIALOG1GRID1, wxID_DIALOG1IMPRIMIR, 
 wxID_DIALOG1MODIFICAR, wxID_DIALOG1STOCK, wxID_DIALOG1TXTFECHACAJA, 
] = [wx.NewId() for _init_ctrls in range(13)]

[wxID_DIALOG1MENU1ITEMS0] = [wx.NewId() for _init_coll_menu1_Items in range(1)]

class Dialog1(wx.Dialog):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Dialog.__init__(self, id=wxID_DIALOG1, name='', parent=prnt,
              pos=wx.Point(261, 71), size=wx.Size(744, 453),
              style=wx.DEFAULT_DIALOG_STYLE, title='Caja Diaria')
        self.SetClientSize(wx.Size(736, 426))

        self.datePickerCtrl1 = wx.DatePickerCtrl(id=wxID_DIALOG1DATEPICKERCTRL1,
              name='datePickerCtrl1', parent=self, pos=wx.Point(96, 8),
              size=wx.Size(96, 21), style=wx.DP_SHOWCENTURY)
        self.datePickerCtrl1.Enable(False)

        self.grid1 = wx.grid.Grid(id=wxID_DIALOG1GRID1, name='grid1',
              parent=self, pos=wx.Point(8, 40), size=wx.Size(720, 336),
              style=0)

        self.txtfechacaja = wx.StaticText(id=wxID_DIALOG1TXTFECHACAJA,
              label='Fecha de Caja:', name='txtfechacaja', parent=self,
              pos=wx.Point(16, 8), size=wx.Size(74, 13), style=0)

        self.modificar = wx.Button(id=wxID_DIALOG1MODIFICAR,
              label='Modificar Egresos/Ingresos', name='modificar', parent=self,
              pos=wx.Point(296, 8), size=wx.Size(160, 23), style=0)
        self.modificar.Bind(wx.EVT_BUTTON, self.OnModificarButton,
              id=wxID_DIALOG1MODIFICAR)

        self.detalle = wx.Button(id=wxID_DIALOG1DETALLE, label='Detalle',
              name='detalle', parent=self, pos=wx.Point(208, 8),
              size=wx.Size(75, 23), style=0)
        self.detalle.Bind(wx.EVT_BUTTON, self.OnDetalleButton,
              id=wxID_DIALOG1DETALLE)

        self.cerrarCaja = wx.Button(id=wxID_DIALOG1CERRARCAJA,
              label='Cerrar Caja', name='cerrarCaja', parent=self,
              pos=wx.Point(648, 8), size=wx.Size(75, 23), style=0)
        self.cerrarCaja.Bind(wx.EVT_BUTTON, self.OnCerrarCajaButton,
              id=wxID_DIALOG1CERRARCAJA)

        self.imprimir = wx.Button(id=wxID_DIALOG1IMPRIMIR, label='Imprimir',
              name='imprimir', parent=self, pos=wx.Point(560, 392),
              size=wx.Size(80, 23), style=0)
        self.imprimir.Bind(wx.EVT_BUTTON, self.OnImprimirButton,
              id=wxID_DIALOG1IMPRIMIR)

        self.button1 = wx.Button(id=wxID_DIALOG1BUTTON1,
              label='Listado Art. Vendidos EN 1', name='button1', parent=self,
              pos=wx.Point(104, 392), size=wx.Size(144, 23), style=0)
        self.button1.Bind(wx.EVT_BUTTON, self.OnButton1Button,
              id=wxID_DIALOG1BUTTON1)

        self.button2 = wx.Button(id=wxID_DIALOG1BUTTON2,
              label='Listado Art. Vendidos v2', name='button2', parent=self,
              pos=wx.Point(256, 392), size=wx.Size(136, 23), style=0)
        self.button2.Show(True)
        self.button2.Enable(True)
        self.button2.Bind(wx.EVT_BUTTON, self.OnButton2Button,
              id=wxID_DIALOG1BUTTON2)

        self.stock = wx.Button(id=wxID_DIALOG1STOCK, label='Stock',
              name='stock', parent=self, pos=wx.Point(8, 392), size=wx.Size(88,
              23), style=0)
        self.stock.Bind(wx.EVT_BUTTON, self.OnStockButton, id=wxID_DIALOG1STOCK)

        self.button3 = wx.Button(id=wxID_DIALOG1BUTTON3, label='Reporte',
              name='button3', parent=self, pos=wx.Point(472, 392),
              size=wx.Size(80, 23), style=0)
        self.button3.Bind(wx.EVT_BUTTON, self.OnButton3Button,
              id=wxID_DIALOG1BUTTON3)

        self.button4 = wx.Button(id=wxID_DIALOG1BUTTON4, label='Transferencias',
              name='button4', parent=self, pos=wx.Point(648, 392),
              size=wx.Size(80, 23), style=0)
        self.button4.Bind(wx.EVT_BUTTON, self.OnTransferenciasImprimir,
              id=wxID_DIALOG1BUTTON4)

    def __init__(self, parent):
        self.padre = parent
        #hoy = time.strptime(self.padre.fecha,"%d-%m-%y")
        #fechaPago = datetime.datetime(hoy.tm_year, hoy.tm_mon, hoy.tm_mday)
        self.fecha = self.padre.fecha #str(fechaPago.strftime("%Y-%m-%d"))
        
        self.datosArt = []
        
        self.datosCaja = []
        self.renglon = []
        
        self._init_ctrls(parent)
        self.cargaGrilla()
        self.cargaDatos()

        if self.padre.loginRol == "cajera" or self.padre.loginRol == "root":
            self.button2.Show(True)
            self.button2.Enable(True)
            self.stock.Show(True)
            self.stock.Enable(True)
            
        else: 
            self.button2.Show(False)
            self.button2.Enable(False)
            self.stock.Show(False)
            self.stock.Enable(False)
        
        self.button2.Refresh()
        self.stock.Refresh()
        self.validar_caja_cerrada()
        
    def validar_caja_cerrada(self):
        if utiles.isCajaCerrada(""):
            self.cerrarCaja.Enable(False)
            self.modificar.Enable(False)

    def cargaGrilla(self):

        tablaSQL= "ventas"
        busca = " fecha = '"+self.fecha+"'"
        resultado =consultasBD.cuentafilasagrupado(self,'*',tablaSQL,str(busca))
        print "=>",self.padre.loginRol
        if self.padre.loginRol=="cajera" or self.padre.loginRol == "root":
            self.columnas2 =['Forma de Pago','Descripcion','    Egresos    ','  Ingresos  ','  Ventas  ','  En  2  ' ,'Recibos','  Total']
        else:
            self.columnas2 =['Forma de Pago','Descripcion','    Egresos    ','  Ingresos  ','  Ventas  ' ,'Recibos','  Total']
        
        self.grid1.CreateGrid(60,len(self.columnas2))
        
        for i in range(len(self.columnas2)-1,-1,-1): 
            self.grid1.SetColLabelValue(i,self.columnas2[i])
        self.grid1.AutoSizeColumn(0,True)
        self.grid1.AutoSizeColumn(1,True)
        self.grid1.AutoSizeColumn(2,True)
        self.grid1.AutoSizeColumn(3,True)
        self.grid1.AutoSizeColumn(4,True)
        self.grid1.AutoSizeColumn(5,True)
        
        if self.padre.loginRol=="cajera" or self.padre.loginRol == "root":
            self.grid1.AutoSizeColumn(6,True)
            
        #self.grid1.AutoSizeColumn(7,True)
        #self.grid2.SetColSize(1,100)
        self.grid1.DisableDragColSize()
        
        for x in xrange(int(resultado)):
            for i in xrange(len(self.columnas2)-1,-1,-1): 
                    self.grid1.SetReadOnly(x,i,True)
        
    def cargaDatos(self):
        self.datosCaja=[]
        renglon = ["","","","","","","",""]
        for x in xrange(60):
            for j in xrange(len(self.columnas2)):
                self.grid1.SetCellValue(x,j,"")
                
        tablaSQL= "ventas"
        busca = " fecha = '"+self.fecha+"'"
        resultado =consultasBD.cuentafilasagrupado(self,'*',tablaSQL,str(busca))
        
        condi = "a.fecha='%s' and (a.idventa = b.idventa)" % (self.fecha)
        #carga los valores en la grilla
        condifecha = "fecha ='"+self.fecha+"'"
        resultado2 =consultasBD.cajavalores(self,'*',tablaSQL,str(condi),str(condifecha))
        i = int(0)
        
        #idformapago = 1
        egreso = float(0.0)
        ingreso = float(0.0)
        
        for r in resultado2:
            
            renglon = ["","","","","","","",""] 
            egreso = float(0.0)
            ingreso = float(0.0)
                 
            idformapagos = r[0] #en p , mastercard, visa1 
            
            #idformaticket = r[0] # en 1 o en 2
            #egresos
            condicionSQL = "fecha='%s' and tipoalta='Egreso' and (idvalor='%s')" % (str(self.fecha),r[0])
            resultadose = consultasBD.executaSumadorSQL(self,"*","cajachica",condicionSQL)
            for b in resultadose:
                egreso = b[0]
            
            #ingresos
            condicionSQL = "fecha='%s' and tipoalta='Ingreso' and (idvalor='%s') " % (str(self.fecha),r[0])
            resultadosi = consultasBD.executaSumadorSQL(self,"*","cajachica",condicionSQL)
            for ing in resultadosi:
                ingreso = ing[0]
            
            en1 = 0.0
            en2 = 0.0
        
            condicion1 = "a.fecha='%s' and idformapagos='%s' and idformaticket= 1" % (str(self.fecha),idformapagos)
            
            condicion2 = "a.fecha='%s' and idformapagos='%s' and idformaticket= 2" % (str(self.fecha),idformapagos)
           
            discrimina = consultasBD.cajaValoresDiscrimina(self,"*",condicion1,condicion2)
            sale = 1
            for d in discrimina:
                if sale==1:
                    en1 = d[0]
                    sale=2
                else:
                    en2 = d[0]
            
            #si es CC
            #aca va el select para darle valores a en1 y en2
            print "============>",idformapagos
            
            if idformapagos in ('cc','CC','CC1','CC2','CC3','CC4'):
                condicion11 = "v.fecha='%s' and idformapagos='%s' and idformaticket= 1" % (str(self.fecha),idformapagos)
                condicion22 = "v.fecha='%s' and idformapagos='%s' and idformaticket= 2" % (str(self.fecha),idformapagos)
                
                sqlcc1="SELECT SUM(x.total) as 'totalx' from (SELECT (montocuota) as 'TOTAL',v.idcliente FROM ventas v, vtas_ctasctes vt WHERE v.idventa = vt.idventa and %s ) x" % condicion11
                print sqlcc1
                resultcc1= consultasBD.ordenCrudaResultDictSinCommit(sqlcc1)
                en1 = resultcc1["totalx"]
        
                sqlcc2="SELECT SUM(x.total) as 'totalx' from (SELECT (montocuota) as 'TOTAL',v.idcliente FROM ventas v, vtas_ctasctes vt WHERE v.idventa = vt.idventa and %s ) x" % condicion22
                print sqlcc2
                resultcc2= consultasBD.ordenCrudaResultDictSinCommit(sqlcc2)
                en2 = resultcc2["totalx"]
            
            #saco en 1
            if egreso == None:
                    egreso = 0.0
                    
            if ingreso == None:
                    ingreso = 0.0
                    
            if en1 == None:
                    en1 = 0.0
                    
            if en2 == None:
                    en2 = 0.0
                    
			#RECIBOS
            fechacambiada = self.fecha[8:10]+"-"+self.fecha[5:7]+"-"+self.fecha[:4]
            
            SQL="select sum(z.Total) as 'ztotal' from (SELECT distinct idformapago,a.montopago as 'Total',a.idcliente FROM vtas_valores a,vtas_ctasctestienepagos b WHERE a.idrecibo=b.idrecibo AND fecha='%s' AND idformapago='%s' UNION SELECT idformapago,SUM(a.montopago ) as 'Total',a.idcliente FROM vtas_valores a WHERE descripcion like '%%%s%%' AND idformapago='%s' group by idformapago) z" % (str(self.fecha),r[0],str(fechacambiada),r[0])
            resultados = consultasBD.ordenCrudaResultDict(SQL)
            utiles.logOperaciones("Caja.py: cargaDatos(): "+str(resultados))
            
            recibos = float(0.00)
            if resultados["ztotal"]==0:
                recibos=0.00
            else:
                print (resultados["ztotal"])
                recibos = (resultados["ztotal"])
                       
            if resultados["ztotal"]==None:
                recibos=0.00
            
            print ingreso
            print egreso
            print recibos
            if r[0] != None:
                print "r0"+r[0]
                self.grid1.SetCellValue(i,0,str(r[0])) 
                self.grid1.SetCellValue(i,1,str(r[0])) 
                self.grid1.SetCellValue(i,2,str(round(-egreso,2))) #egreso
                self.grid1.SetCellValue(i,3,str(round(ingreso,2))) #ingreso
                
                self.grid1.SetCellValue(i,4,str(round(en1,2)))  #en1
                
                if self.padre.loginRol=="cajera" or self.padre.loginRol == "root":
                    self.grid1.SetCellValue(i,5,str(round(en2,2)))  #en2
                    self.grid1.SetCellValue(i,6,str(round(recibos,2)))  #recibos
                    total = float(-egreso) + float(ingreso) + float(en1) + float(en2) + float(recibos)
                    self.grid1.SetCellValue(i,7,str(round(total,2))) #total en PESOS
                    
                    #carga los datos para la impresion
                    print "CANTIDAD"+str(i)

                    fila = [idformapagos,idformapagos,round(-egreso,2), round(ingreso,2),round(en1,2),round(en2,2),round(recibos,2),round(total,2)]
                    self.datosCaja.append(fila)
                    
                else:
                    
                    #self.grid1.SetCellValue(i,5,str(round(en2,2)))  #en2
                    self.grid1.SetCellValue(i,5,str(round(recibos,2)))  #recibos
                    total = float(-egreso) + float(ingreso) + float(en1) + float(recibos)
                    self.grid1.SetCellValue(i,6,str(round(total,2))) #total en PESOS
                    
                    #carga los datos para la impresion
                    print "CANTIDAD"+str(i)

                    fila = [idformapagos,idformapagos,round(-egreso,2), round(ingreso,2),round(en1,2),round(recibos,2),round(total,2)]
                    self.datosCaja.append(fila)
                
            else:
                pass
                
                #self.grid1.SetCellValue(i,2,str(round(0.0,2))) 
                #self.grid1.SetCellValue(i,3,str(round(0.0,2)))
                #self.grid1.SetCellValue(i,4,str(round(en1,2)))
                #self.grid1.SetCellValue(i,5,str(round(en2,2))) 
            
            #idformapago = 2
            i = i + 1
        
            #egreso
            condicionSQL = "fecha='%s' and tipoalta='Egreso' and (idvalor='%s')" % (str(self.fecha),r[0])
            resultadose = consultasBD.executaSumadorSQL(self,"*","cajachica",condicionSQL)
            for b in resultadose:
                egreso = b[0]
            
            #ingresos
            condicionSQL = "fecha='%s' and tipoalta='Ingreso' and (idvalor='%s') " % (str(self.fecha),r[0])
            resultadosi = consultasBD.executaSumadorSQL(self,"*","cajachica",condicionSQL)
            for ing in resultadosi:
                ingreso = ing[0]
        
        total1 = float("0.0")
        total2 = float("0.0")
        total3 = float("0.0")
        total = float("0.0")
        for r in xrange(i):
            total1 = total1 + float(self.grid1.GetCellValue(r,4))
            if self.padre.loginRol=="cajera" or self.padre.loginRol == "root":
                total2 = total2 + float(self.grid1.GetCellValue(r,5))
                total3 = total3 + float(self.grid1.GetCellValue(r,6))
                total = total + float(self.grid1.GetCellValue(r,7))
            else:
                #total2 = total2 + float(self.grid1.GetCellValue(r,5))
                total3 = total3 + float(self.grid1.GetCellValue(r,5))
                total = total + float(self.grid1.GetCellValue(r,6))
        
        if self.padre.loginRol=="cajera" or self.padre.loginRol == "root":
            self.grid1.SetCellValue(i+1 ,0,"TOTALES ---->")
            self.grid1.SetCellValue(i+1 ,4,str(total1))
            self.grid1.SetCellValue(i+1 ,5,str(total2))
            self.grid1.SetCellValue(i+1 ,6,str(total3))
            self.grid1.SetCellValue(i+1 ,7,str(total))
            fila = ["Totales ", "-->", "-->","-->", str(total1),str(total2),str(total3),str(total)]
            self.datosCaja.append(fila)
        else:
            self.grid1.SetCellValue(i+1 ,0,"TOTALES ---->")
            self.grid1.SetCellValue(i+1 ,4,str(total1))
            self.grid1.SetCellValue(i+1 ,5,str(total3))
            self.grid1.SetCellValue(i+1 ,6,str(total))
            fila = ["Totales ", "-->", "-->","-->", str(total1),str(total3),str(total)]
            self.datosCaja.append(fila)
        
        #detalle de egresos e ingresos
        SQL1= "SELECT * FROM cajachica WHERE fecha = '%s'" % self.fecha
        print SQL1
        resultados = consultasBD.ordenCrudaDict(SQL1)
        self.grid1.SetCellValue(i+3 ,0,"DETALLES INGRESOS Y EGRESOS:")
        fila = [str("DETALLES EGRESOS E INGRESOS:")]
        self.datosCaja.append(fila)
        for r in resultados:
            self.grid1.SetCellValue(i+4,0,str(r["fecha"]))
            self.grid1.SetCellValue(i+4 ,1,str(r["tipoalta"]))
            self.grid1.SetCellValue(i+4 ,2,str(r["destinatario"]))
            self.grid1.SetCellValue(i+4 ,3,str(r["monto"]))
            fila = [str(r["fecha"]),str(r["tipoalta"]),str(r["destinatario"]), str(r["monto"])]
            self.datosCaja.append(fila)
            i=  i + 1
        
        #agregado
        texto1 = "MODISTA: --------> DETALLE DE LO INGRESADO :"
        #for p in xrange(i):
        #    if self.grid1.CellValue(i,2)=="Modista" : 
        #        texto2 = " Clienta: _______________________ ; Monto: ___$______________ Modista:___________________"

    def OnModificarButton(self, event):
        dlg = CAJAchicaAltas.Dialog1(self,self.fecha)
        try:
            dlg.ShowModal()
            self.cargaDatos()
            self.grid1.Refresh()
        finally:
            dlg.Destroy()

    def OnDetalleButton(self, event):
        dlg = CajaDetallesVentas.CajaDetallesVentas(self,self.fecha)
        try:
            dlg.ShowModal()
            self.cargaDatos()
            self.grid1.Refresh()
        finally:
            dlg.Destroy()

    def procesandoCierreCaja(self):
        print "Cierre Z en impresora fiscal"
        fiscal.cierreZ()
        
        camposSQL = "cajacerrada='%s'" % str((self.fecha))
        condicionSQL = "sucursal=%s" % str((self.padre.sucursalNro))
        
        utiles.reporte_html(self,self.datosCaja, self.columnas2,"1")
        try:
            consultasBD.executaUpdateSQL(self,"parametros",camposSQL,condicionSQL)
            utiles.mensaje(self, "Se Cerro la CAJA del dia %s" % self.fecha)    
            try:
                os.system("taskkill /IM firefox.exe /F")
                os.system("c:\explorer.lnk http://localhost/web/movimientos_stock.php")
            except:
                print 'Problemas para mostrar estadisticas de movimientos de stock'
                print 'Verifique que exista el archivo "movimientos_stock.php"'
        except:
            print "ERROR: problemas para Cerrar la caja del dia %s" % self.fecha

    def OnCerrarCajaButton(self, event):
        #cierra la caja del dia
        texto = "ATENCION: DESEA CERRAR LA CAJA?\n\n"
        texto+= "Este proceso es unico por dia.\n"
        texto+= "Cerrada la caja no podra emitir ninguna otra factura\n"
        texto+= "para la fecha actual, ni procesar ingresos o egresos.\n\n"
        texto+= "ACEPTAR = cierra caja               CANCELAR = salir"
        confirma = Dialog2.Dialog2(self, texto)

        try:
            confirma.ShowModal()
            if confirma.getSeleccion():
                print "Cierre confirmado"
                self.procesandoCierreCaja()

                print "ENVIANDO MAIL DE AGRADECIMIENTOS"
                import mailagradecimientos
                try:
                    mailagradecimientos.enviar(self.datePickerCtrl1.GetLabel())
                except:
                    print "ERROR ENVIANDO MAIL AGRADECIMIENTOS"
                    aux1 = "Error enviando mail de agradecimientos\n"
                    aux2 = "Anote este mensaje en los papeles del cierre"
                    utiles.mensaje(None,aux1+aux2)

##                print "BACKUP DE LA BASE DE DATOS"
##                import dbBackup
##                appBack = dbBackup.create(None)
##                appBack.Show()

                import mensajes
                dlg = mensajes.Dialog1(self)
                try:
                    dlg.ShowModal()
                finally:
                    dlg.Destroy() 

                return
        finally:
            print "Cierre cancelado por el usuario"
            import mensajes
            dlg = mensajes.Dialog1(self)
            try:
                dlg.ShowModal()
            finally:
                dlg.Destroy() 
        return
        
    def OnButton1Button(self, event):
        self.datosArt = []
        descuentos = 0
        contador = 0
        
        #saca los art. vendidos en 2
        filaart = ["VENTA Articulos. DIA:", "  -->   ", "   -->   ","  -->  ", str(self.fecha),"  <--  ","  <--  ","  <--  ","  <--  ", "  < ---" ]
        self.datosArt.append(filaart)
        
        filaart = ["IDTICKET", "  NROFACTURA   ","PROVEEDOR  ", "   PTC   ","  DESCRIPCION  ", "TALLE","  COLOR  ","  CANTIDAD  ","  PRECIO LISTA  ","  DESCUENTO  ", "  PRECIO FINAL" ]
        self.datosArt.append(filaart)
        
        sql="SELECT idticket,nrofactura,ptc ,descri,talle,color,cantidad,preciolista,descuento,preciofinal FROM `ventastieneproductos` WHERE idformaticket =1 AND auditoria = '%s'" % (self.fecha)
        resultados = consultasBD.ordenCrudaDict(sql)
        print sql
        for i in resultados:
            
            print str(i["idticket"])
            
            #busco proveedor
            ptc = i["ptc"]
            SQL2 = "SELECT pr.nombre as nombre FROM PRODUCTOS P, producto_talle_color ptc,proveedor pr  WHERE  p.codsussan=ptc.codsussan and ptc.id='%s' and p.proveedor=pr.idproveedor " % str(i["ptc"])
            prove = consultasBD.ordenCrudaDict(SQL2)
            nombreProveedor = ""
            for j in prove:
                nombreProveedor = str(j["nombre"])
            
            filaart = [str(i["idticket"]),str(i["nrofactura"]),str(nombreProveedor),str(i["ptc"]),str(i["descri"]),str(i["talle"]),str(i["color"]),str(i["cantidad"]),str(i["preciolista"]),str(i["descuento"]),str(i["preciofinal"])]
            
            descuentos = descuentos + i["descuento"]
            contador = contador+1
            print filaart
            self.datosArt.append(filaart)

        espacio = ["--------------------"]
        self.datosArt.append(espacio)
        self.datosArt.append(espacio)
        estadistica = ["Cantid. de Productos: ", contador ,"----> Porcentaje de Descuento: ",round(descuentos/contador,2) , "%"]
        self.datosArt.append(estadistica)
        
        # estadistica total 
        print "empiez estadistica"
        b=[]
        for x in xrange(len(self.datosArt)): 
            print self.datosArt[x]
            if (self.datosArt[x][0]!="--------------------"):
            #if (self.datosArt[x][0]!="----> Porcentaje de Descuento: "):
                
               # self.datosArt[x][2]!="----> Porcentaje de Descuento: " and self.datosArt[x][2]!="PROVEEDOR  "):
                print self.datosArt[x][2]
                b.append(self.datosArt[x][2])
                print "entro for1"
        
        porProvee = [(x, b.count(x)) for x in set(b)]
        print "lista" + str(porProvee)
        
        listaProvee= sorted(porProvee, key=operator.itemgetter(1))        
        listaProvee.reverse()
        
        espacio = ["--------------------"]
        ranking = ["Ranking TOP 10 de Proveedores: "]
        self.datosArt.append(espacio)
        self.datosArt.append(ranking)
        rangleta = ["Puesto Nr. ", "Proveedor: ", "Cantidad de Productos Vendidos"]
        self.datosArt.append(rangleta)
        for x in xrange(len(listaProvee)) :
                suma = [ x + 1,listaProvee[x][0] ,listaProvee[x][1]]
                if (x) < 10 :
                    self.datosArt.append(suma)
            
        utiles.reporte_html(self,self.datosArt, "","0")

    def OnButton2Button(self, event):
        self.datosArt = []
        descuentos = 0
        contador = 0
        #saca los art. vendidos en 2
        filaart = ["VENTA Articulos. DIA en 2:", "  -->   ", "   -->   ","  -->  ", str(self.fecha),"  <--  ","  <--  ","  <--  ","  <--  ", "  < ---" ]
        self.datosArt.append(filaart)
        
        filaart = ["IDTICKET  ", "  NROFACTURA   ","    PROVEEDOR    "  , "   PTC   ","  DESCRIPCION  ", "TALLE","  COLOR  ","  CANTIDAD  ","  PRECIO LISTA  ","  DESCUENTO  ", "  PRECIO FINAL" ]
        self.datosArt.append(filaart)
        
        sql="SELECT idticket,nrofactura,ptc ,descri,talle,color,cantidad,preciolista,descuento,preciofinal FROM `ventastieneproductos` WHERE idformaticket =2 AND auditoria = '%s'" % (self.fecha)
        resultados = consultasBD.ordenCrudaDict(sql)
        print sql
        cont = 0
        for i in resultados:
            print str(i["idticket"])
            
            #busco proveedor
            ptc = i["ptc"]
            SQL2 = "SELECT pr.nombre as nombre FROM PRODUCTOS P, producto_talle_color ptc,proveedor pr  WHERE  p.codsussan=ptc.codsussan and ptc.id='%s' and p.proveedor=pr.idproveedor " % str(i["ptc"])
            prove = consultasBD.ordenCrudaDict(SQL2)
            for j in prove:
                nombreProveedor = str(j["nombre"])
            
            filaart = [str(i["idticket"]),str(i["nrofactura"]),str(nombreProveedor),str(i["ptc"]),str(i["descri"]),str(i["talle"]),str(i["color"]),str(i["cantidad"]),str(i["preciolista"]),str(i["descuento"]),str(i["preciofinal"])]
            print filaart
            descuentos = descuentos + i["descuento"]
            contador = contador+1
            
            self.datosArt.append(filaart)
        
        espacio = ["--------------------","",""]
        self.datosArt.append(espacio)
        self.datosArt.append(espacio)
        estadistica = ["Cantid. de Productos: ", contador ," ----> Porcentaje de Descuento:  ",round(descuentos/contador,2) , "%"]
        self.datosArt.append(estadistica)
        
        # estadistica total 
        print "empiez estadistica"
        b=[]
        for x in xrange(len(self.datosArt)): 
            print self.datosArt[x]
            print self.datosArt[x][2]
            
            if (self.datosArt[x][2]!=["--------------------"] and self.datosArt[x][2]!=" ----> Porcentaje de Descuento:  " and self.datosArt[x][2]!="PROVEEDOR  "):
                b.append(self.datosArt[x][2])
                print "entro for1"
        
        porProvee = [(x, b.count(x)) for x in set(b)]
        listaProvee= sorted(porProvee, key=operator.itemgetter(1))        
        listaProvee.reverse()
        
        espacio = ["--------------------"]
        ranking = ["Ranking TOP 10 de Proveedores: "]
        self.datosArt.append(espacio)
        self.datosArt.append(ranking)
        rangleta = ["Puesto Nr.", "Proveedor: ", "Cantidad de Productos Vendidos:"]
        self.datosArt.append(rangleta)
        for x in xrange(len(listaProvee)) :
            
            suma = [ x + 1,listaProvee[x][0] ,listaProvee[x][1]]
            
            if (x) < 10 :
                self.datosArt.append(suma)
        
        print self.datosArt
        utiles.reporte_html(self,self.datosArt, "","0")

    def OnStockButton(self, event):
        self.datosStock = []
        descuentos = 0
        contador = 0
        #saca los art. vendidos en 2
        filaart = ["VENTA Articulos. Quedan en stock:", "  -->   ","  -->   ", "   -->   ","  -->  ", str(self.fecha),"  <--  ","  <--  ","  <--  ","  <--  ", "  < ---" ," --"]
        self.datosArt.append(filaart)
        
        filaart = ["PTC  ", "  CODSUSSAN   ","  TALLE   "  , " COLOR ","NOMB. COLOR:  ", "DESCRIP.","PRECIO  ","  PROVEEDOR  ","  STA FE ","  PARANA  ", "  SAN MARTIN","DIFERENCIA" ]
        self.datosStock.append(filaart)
        
        variable=""
        if str(self.padre.sucursalNro)=="1": 
            variable=" AND c.stock>0 "
            
        if str(self.padre.sucursalNro)=="2":
            variable=" AND d.stock>0 "
        
        if str(self.padre.sucursalNro)== "3":
            variable=" AND e.stock>0 "
        
        sql="SELECT distinct a.id,a.codsussan,a.talle,a.color,col.nombre,b.descri,b.preciolt1 ,b.proveedor,COALESCE(c.stock, 0) as SANTAFE, \
             COALESCE(d.stock, 0) as PARANA , COALESCE(e.stock, 0) as SanMARTIN \
             FROM colores col , producto_talle_color a JOIN productos b ON (a.codsussan=b.codsussan) \
             LEFT JOIN stock c ON (a.id=c.ptc AND c.sucursal = 1 ) \
             LEFT JOIN stock d ON (a.id=d.ptc AND d.sucursal = 2 ) \
             LEFT JOIN stock e ON (a.id=e.ptc AND e.sucursal = 3 )\
             WHERE col.idcolor=a.color %s AND a.codsussan in( SELECT DISTINCT codsussan FROM ventastieneproductos vtp, producto_talle_color ptc WHERE vtp.auditoria = '%s' AND vtp.ptc = ptc.id ) order by a.codsussan" % (str(variable),str(self.fecha))
        
        print sql
        resultados = consultasBD.ordenCrudaDict(sql)
        cont = 0
        for i in resultados:
                       
            #busco proveedor
            
            SQL2 = "SELECT pr.nombre as nombre FROM PRODUCTOS P, producto_talle_color ptc,proveedor pr  WHERE  p.codsussan=ptc.codsussan and ptc.id='%s' and p.proveedor=pr.idproveedor " % str(i["id"])
            prove = consultasBD.ordenCrudaDict(SQL2)
            for j in prove:
                nombreProveedor = str(j["nombre"])
            
            filaart = [str(i["id"]),str(i["codsussan"]),str(i["talle"]),str(i["color"]),str(i["descri"]),str(i["nombre"]),str(i["preciolt1"]),str(i["proveedor"])+"--"+str(nombreProveedor),str(i["SANTAFE"]),str(i["PARANA"]),str(i["SanMARTIN"])]
            print filaart
           
            contador = contador+1
            
            self.datosStock.append(filaart)
        
        utiles.reporte_html(self,self.datosStock, "","0")
        
    def OnButton3Button(self, event):
        
        self.infoReporte = []
        #cant. de notas de credito 
        filaart = ["NOTAS DE CREDITOS:", "  -->   ","  -->   ", "   -->   ","  -->  ", str(self.fecha),"  <--  ","  <--  ","  <--  ","  <--  ", "  < ---" ," --"]
        self.infoReporte.append(filaart)
        sql = "select count(*) as 'cantidad' ,sum(preciofinal) as 'sumaprecios' from vtas_nc where fecha='%s'" % (self.fecha)
        print sql
        resultados = consultasBD.ordenCrudaDict(sql)
        for i in resultados:
            if i["cantidad"] != None:
                filaart = ["Cant. de Notas de Credito:", str(i["cantidad"])," Por un total de $:  ",str(i["sumaprecios"])]
            else:
                filaart = ["----------"]
                
        self.infoReporte.append(filaart)
        
        filaart = ["---------"]
        self.infoReporte.append(filaart)
        
        #cant. de cambios (productos en -1) 
        #totalfactura < 0
        filaart = ["Cantidad de Cambios:", "  -->   ","  -->   ", "   -->   ","  -->  "," ---- " , "  <--  ","  <--  ","  <--  ","  <--  ", "  < ---" ," --"]
        self.infoReporte.append(filaart)
        sql1 = "SELECT distinct v.totalfactura, c.nombre FROM ventas v, cliente c, ventastieneproductos vtp WHERE v.idventa = vtp.idticket AND vtp.cantidad = -1 AND c.idcliente = v.idcliente AND v.totalfactura <0 AND v.idformaticket =2 AND fecha = '%s'" % (self.fecha)
        resultados = consultasBD.ordenCrudaDict(sql1)
        for i in resultados:
            if i["nombre"] != None:
                filaart = ["Nombre:", str(i["nombre"])," Por un total de $:  ",str(i["totalfactura"])]
                self.infoReporte.append(filaart)
            else:
                filaart = ["-------------"]
                self.infoReporte.append(filaart)
        
        filaart = ["---------"]
        self.infoReporte.append(filaart)
        
        #cant. de recibos en ctas ctes realizados
        filaart = ["Cantidad de Recibos Realizados:", "  -->   ","  -->   ", "   -->   ","  -->  "," ---- " , "  <--  ","  <--  ","  <--  ","  <--  ", "  < ---" ," --"]
        self.infoReporte.append(filaart)
        
        sql2 = "select sum(x.monto) as monto1,count(*) as cantirecibos from  (SELECT sum(montopagado) as monto,count(idrecibo) as cantrecibos FROM `vtas_ctasctestienepagos` WHERE `fecha` = '%s' group by idrecibo) x " % (self.fecha)
        resultados = consultasBD.ordenCrudaDict(sql2)
        for i in resultados:
            if i["monto1"] != None:
                filaart = ["Cant. de recibos:", str(i["cantirecibos"])," Por un total de $:  ",str(i["monto1"])]
                self.infoReporte.append(filaart)
            else:
                filaart = ["-------------"]
                self.infoReporte.append(filaart)
        
        filaart = ["---------"]
        self.infoReporte.append(filaart)
        
        #cant. de compras realizadas (por proveedores y x totales)
        filaart = ["Cantidad de Compras Realizadas:", "  -->   ","  -->   ", "   -->   ","  -->  "," ---- " , "  <--  ","  <--  ","  <--  ","  <--  ", "  < ---" ," --"]
        self.infoReporte.append(filaart)
        
        sql3 = "SELECT p.idproveedor,cantprendas,total,p.nombre FROM `compras` c, proveedor p WHERE  `fechaingreso` = '%s' and c.idproveedor=p.idproveedor" % (self.fecha)
        resultados = consultasBD.ordenCrudaDict(sql3)
        for i in resultados:
            if i["fechaingreso"] != None:
                filaart = ["Proveedor: ", str(i["nombre"]),"----","Por una total Cant. de prendas:", str(i["cantprendas"]),"-------"," Por un total de $:  ",str(i["total"])]
                self.infoReporte.append(filaart)
            else:
                filaart = ["-------------"]
                self.infoReporte.append(filaart)
        
        filaart = ["---------"]
        self.infoReporte.append(filaart)
        
        #cant. de devoluciones de compras realizadas
        filaart = ["Devoluciones de Compras Realizadas:", "  -->   ","  -->   ", "   -->   ","  -->  "," ---- " , "  <--  ","  <--  ","  <--  ","  <--  ", "  < ---" ," --"]
        self.infoReporte.append(filaart)
        
        sql4 = "SELECT p.nombre,c.montoDevolucion,cantProductos FROM `comprasdevoluciones` c, proveedor p WHERE fecha = '%s' AND c.idProveedor = p.idproveedor" % (self.fecha)
        resultados = consultasBD.ordenCrudaDict(sql4)
        for i in resultados:
            if i["montoDevolucion"] != None:
                filaart = ["Proveedor: ", str(i["nombre"]),"----","Total de prendas:", str(i["cantprendas"]),"-------"," Por un total de $:  ",str(i["montoDevolucion"])]
                self.infoReporte.append(filaart)
            else:
                filaart = ["-------------"]
                self.infoReporte.append(filaart)
        
        filaart = ["---------"]
        self.infoReporte.append(filaart)
        
        #cant. de pagos a proveedores realizados
        
        #cant. de productos nuevos
        
        #cant. de transferencias realizadas -- Cant. de productos
        filaart = ["Transferencias Realizadas:", "  -->   ","  -->   ", "   -->   ","  -->  "," ---- " , "  <--  ","  <--  ","  <--  ","  <--  ", "  < ---" ," --"]
        self.infoReporte.append(filaart)
        
        fe = self.fecha+"%"
        sql5 = "SELECT * FROM `transferencias` WHERE `fecha` like '%s'" % (fe)
        resultados = consultasBD.ordenCrudaDict(sql5)
        for i in resultados:
            if i["fecha"] != None:
                if i["estado"]==1 : estado="transferido... no recepcionado aun"
                else: estado="transferido y recepcionado"
                filaart = ["Transferencias: ", str(i["id"]),"----","Suc. Destino :", str(i["idsucdestino"]),"-------"," Estado:  ",str(estado)]
                self.infoReporte.append(filaart)
            else:
                filaart = ["-------------"]
                self.infoReporte.append(filaart)
        
        filaart = ["---------"]
        self.infoReporte.append(filaart)
        
        #cant. de transferencias pendientes de recepcionar
        filaart = ["Transferencias sin Recepcionar :", "  -->   ","  -->   ", "   -->   ","  -->  "," ---- " , "  <--  ","  <--  ","  <--  ","  <--  ", "  < ---" ," --"]
        self.infoReporte.append(filaart)
        
        fe = self.fecha+"%"
        sql6 = "SELECT * FROM `transferencias` WHERE  estado=1 and fecha like '%s' " % (fe) 
        print sql6
        resultados = consultasBD.ordenCrudaDict(sql6)
        for i in resultados:
            if i["fecha"] != None:
                if i["estado"]==1 : estado="transferido... no recepcionado aun"
                else: estado="transferido y recepcionado"
                filaart = ["Transferencias: ", str(i["id"]),"----","Suc. Destino :", str(i["idsucdestino"]),"-------"," Estado:  ",str(estado)]
                self.infoReporte.append(filaart)
            else:
                filaart = ["-------------"]
                self.infoReporte.append(filaart)
        
        filaart = ["---------"]
        self.infoReporte.append(filaart)
        
        utiles.reporte_html(self,self.infoReporte, "","0")
     
    def OnImprimirButton(self, event):
        utiles.reporte_html(self,self.datosCaja, self.columnas2, "0", True)
        self.imprimirTransferenciasPendientes()

        print "Generando reportes"
        fecha = utiles.obtenerFecha("Y-m-d")
        fecha1 = fecha+" 00:00:00"
        fecha2 = fecha+" 23:59:59"
        
        #datos de caja chica: ingresos y egresos
        r1 = "SELECT * FROM cajachica "
        r2 = "WHERE fecha LIKE '%"+fecha+"%' AND tipoalta='Egreso' "
        sql = r1+r2
        cajachicaegresos = consultasBD.ordenCrudaDict(sql)
        r1 = "SELECT * FROM cajachica "
        r2 = "WHERE fecha LIKE '%"+fecha+"%' AND tipoalta='Ingresos' "
        sql = r1+r2
        cajachicaingresos = consultasBD.ordenCrudaDict(sql)
        
        #extraigo los pagos
        r1 = "SELECT v.idformaticket, vtp.idformapagos, SUM( vtp.monto ) "
        r2 = "FROM ventas v, ventastienepagos vtp "
        r3 = "WHERE vtp.fecha LIKE  '%"+fecha+"%' "
        r4 = "AND vtp.idventa = v.idventa "
        r5 = "GROUP BY vtp.idformapagos, v.idformaticket "
        sql = r1+r2+r3+r4+r5
        ventasconpagos = consultasBD.ordenCrudaDict(sql)

    def OnTransferenciasImprimir(self, event):
        self.imprimirTransferenciasPendientes()
        
    def imprimirTransferenciasPendientes(self):
        sucursal = utiles.getSucursalActiva()
        r1 = "SELECT p3.id, p3.fecha, p6.nombre, p3.ptc, p4.codsussan, p5.descri, p3.cant \n"
        r2 = "FROM (SELECT p1.id, p1.fecha, p1.idsucorigen ,p2.ptc, p2.cant \n"
        r3 = "      FROM (SELECT id,fecha,idsucorigen FROM transferencias \n"
        r4 = "            WHERE estado='1' AND idsucdestino='"+str(sucursal)+"' \n"
        r5 = "            AND fecha>'2012-01-01 00:00:00') AS p1, \n"
        r6 = "            transferenciastieneproductos AS p2 \n"
        r7 = "      WHERE p1.id=p2.idtransferencia) AS p3, \n"
        r8 = "      producto_talle_color AS p4, \n"
        r9 = "      productos AS p5, sucursales AS p6  \n"
        r0 = "WHERE p3.ptc=p4.id AND p4.codsussan=p5.codsussan AND p3.idsucorigen=p6.codsucursal \n"
        rA = "ORDER BY p3.id,p3.ptc "
        sql = r1+r2+r3+r4+r5+r6+r7+r8+r9+r0
        resultados = consultasBD.ordenCrudaDict(sql)
        
        f=open("c:\\matrisamor.doc\\reporte-TransferenciasPendientes.html","w")
        numeroPagina = 1
        nrosuc,nombresuc = utiles.datosSucursal()
        
        #id,fecha,nombre,ptc,codsussan,descri,cant
        #0  1     2      3   4         5      6
        totalItemPorPagina = 55
        totalPaginas = int(self.grid1.GetNumberRows()-1) / totalItemPorPagina 
        totalPaginas+= 1

        def encabezadoPagina(texto):
            fecha = utiles.getfechaTime()
            a = '<table width="100%" cellspacing="0" border="0">\n'
            a+= '<tr>\n'
            a+= '<td valign="center" align="left" width="33%">'
            a+= 'SUSSAN BOUTIQUE<br>"'+nombresuc+'" -> TRANSFERENCIAS -> PENDIENTES DE RECEPCIONAR<br> '
            a+= '<br></td>\n<td valign="center" align="left" width="34%">'
            a+= '<br>'
            a+= '</td>\n'
            a+= '<td valign="center" align="right" width="33%">'+fecha
            a+= '<br>P&aacute;gina '+str(numeroPagina)+' / '+str(totalPaginas)+'</td>\n'
            a+= '</tr>\n'
            a+= '</table>\n'
            texto+= a
            return texto
        
        def encabezadoTabla(texto):
            #id,fecha,nombre,ptc,codsussan,descri,cant
            #0  1     2      3   4         5      6
            a = '<hr>'
            tama = '"0.05"'
            a+= '<table width="100%" cellspacing="1" border="0"> \n'
            a+= '<tr>\n'
            a+= '<td valign="top" align="right"><font size='+tama+'>Orden</font></td> \n'
            a+= '<td valign="top" align="right"><font size='+tama+'>N&uacute;mero<br>Transferencia</font></td> \n'
            a+= '<td valign="top" align="center"><font size='+tama+'>Fecha</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Sucursal Origen</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>P.T.C.</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>CodSussan</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Descripci&oacute;n</font></td> \n'
            a+= '<td valign="top" align="right"><font size='+tama+'>Cantidad</font></td> \n'
            a+= '</tr> \n'
            a+= '<tr>\n'
            a+= '<td colspan="8"><hr></td>\n'
            a+= '</tr>\n'
            texto+= a
            return texto
        
        cadena = '<?xml version="1.0" encoding="utf-8" ?> \n'
        cadena+= '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> \n'
        cadena+= '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> \n'
        cadena+= '<head> \n'
        cadena+= '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> \n'
        cadena+= '<meta name="generator" content="Docutils 0.4.1: http://docutils.sourceforge.net/" /> \n'
        cadena+= '<title>Sussan Boutique</title> \n'
        cadena+= '</head> \n'
        cadena+= '<body> \n'

        cadena = encabezadoPagina(cadena)
        cadena = encabezadoTabla(cadena)
        f.write(cadena)

        i = 0
        renglon = 0
        anterior = ""
        for item in resultados:
            #id,fecha,nombre,ptc,codsussan,descri,cant
            #0  1     2      3   4         5      6
            i = i + 1
            orden = str(i)
            id = item["id"]
            if anterior == id:
                imprimir = ""
                fecha = ""
                sucursal = ""
            else:
                cadena = '<tr> \n'
                cadena+= '<td colspan="8"><hr></font></td> \n'
                cadena+= '</tr>\n'
                f.write(cadena)
                imprimir = id
                fecha = str(item["fecha"])[:10]
                sucursal = item["nombre"]
            anterior = id
            ptc = item["ptc"]
            codsussan = item["codsussan"]
            descripcion = item["descri"]
            cantidad = str(item["cant"])
            
            tama = '"0.2"'
            cadena = '<tr> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+orden+'</font></td> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+imprimir+'</font></td> \n'
            cadena+= '<td valign="top" align="center"><font size='+tama+'>'+fecha+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+sucursal+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+ptc+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+codsussan+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+descripcion+'</font></td> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+cantidad+'</font></td> \n'
            cadena+= '</tr>\n'
            f.write(cadena)
            
            renglon+= 1
            
            if renglon == totalItemPorPagina :
                f.write("</table><!-- salto de pagina -->\n")
                f.write("<p STYLE='page-break-after: always;'></p>\n")
                renglon = 0
                numeroPagina+= 1
                cadena = encabezadoPagina("")
                cadena = encabezadoTabla(cadena)
                f.write(cadena)

        cadena = '</table>\n'
        f.write(cadena)
        f.close()

        import os
        os.system("taskkill /IM firefox.exe /F")
        os.system("c:\\explorer.lnk c:\\matrisamor.doc\\reporte-TransferenciasPendientes.html")
